#!/bin/bash
#DetectarU script
#set -x
#Variables utilizas para validar el seteo de las mismas.
otrasvarComprobacion=($PATH $CONFDIR $CONFARCH)
carpetasComprobacion=($GRUPO $ARRIDIR $RECHDIR $BINDIR $MAEDIR $REPODIR $LOGDIR)
archmaeComprobacion=($prodmae $sucumae $climae)
archcomComprobacion=($detectarU $grabarParqueU $listarU $moverU $loguearU $iniciarU)

#alias
alias StartD=$BINDIR/StartD
alias StopD=$BINDIR/StopD

######################################################
#     FUNCIONES                                      #
######################################################
function seEjecutoIniciarU() {

  seEjecutoIniciar=0
  
  if [ ! ${#carpetasComprobacion[@]} -eq 0 ]; then
    seEjecutoIniciar=$(($seEjecutoIniciar+1))
  fi

  if [ ! ${#archmaeComprobacion[@]} -eq 0 ]; then
    seEjecutoIniciar=$(($seEjecutoIniciar+1))
  fi 

  if [ ! ${#archcomComprobacion[@]} -eq 0 ]; then
    seEjecutoIniciar=$(($seEjecutoIniciar+1))
  fi 

  if [ ! ${#otrasvarComprobacion[@]} -eq 0 ]; then
    seEjecutoIniciar=$(($seEjecutoIniciar+1))
  fi 
  
  if [ $seEjecutoIniciar -eq 4 ]; then
    echo "1"
  else
    echo "0"
  fi
}

function validarNumero(){

  aValidar=`echo $1 | grep "^[0-9][0-9]*$"`
 
  if  test $? -eq 0 ; then
     echo "0"
  else
     echo "400"
  fi
}

function validarNombreArchivo(){

arch_recibido=$1
MAESTRO=$sucumae

# tomo la fecha de hoy del sistema en formato aaaammdd
fecha_hoy=`date +%Y%m%d`
#inicializo en falso reg y suc encontradas
reg_encontrada="false"
suc_encontrada="false"


  #separo region y sucursal
  region=`echo $arch_recibido | cut -s -d "-" -f1`
  sucursal=`echo $arch_recibido | cut -s -d "-" -f2`

  #valido que sean numeros
  region_es_numero=`validarNumero $region`
  sucursal_es_numero=`validarNumero $sucursal`

if [ $region_es_numero -eq 0 ] && [ $sucursal_es_numero -eq 0 ]; then
  IFS=$'\n'
  #lo comparo con los datos del maestro
  for LINE in $(cat $MAESTRO)
  do

    reg_mae=`echo "$LINE" | cut -s -d "," -f1`
    suc_mae=`echo "$LINE" | cut -s -d "," -f3`

    if [ "$region" = "$reg_mae" ] && [ $reg_encontrada = "false" ]; then
	reg_encontrada="true"
    fi
	
    if [ "$sucursal" = "$suc_mae" ] && [ $reg_encontrada = "false" ]; then
	suc_encontrada="true"
    fi	

    if [ "$region" = "$reg_mae" ]; then
	if [ "$sucursal" = "$suc_mae" ]; then
		fecha_start=`echo "$LINE" | cut -s -d "," -f7 | sed 's-\(..\)/\(..\)/\(....\)-\3\2\1-g'`
      		fecha_end=`echo "$LINE" | cut -s -d "," -f8 | sed 's-\(..\)/\(..\)/\(....\)-\3\2\1-g' | sed 's-\r-""-g'`
		if [ $fecha_end -eq $fecha_end ] 2>/dev/null; then
        		if [ $fecha_start -le $fecha_hoy ] && [ $fecha_end -ge $fecha_hoy ]; then
          			echo "0" 
          			exit
        		else
          			echo "403" 
          			exit
        		fi
     		else
			if [ $fecha_start -le $fecha_hoy ]; then
		  		echo "0" 
          			exit
			else
		  		echo "403" 
          			exit
			fi
		fi
     	else
	     	if [ $sucursal -lt $suc_mae ]; then
	       		break
	     	fi
    	fi
     else
	     if [ $region -lt $reg_mae ]; then
	       break
	     fi
     fi

  done

  if [ $reg_encontrada = "false" ]; then
	echo "401"
  elif [ $suc_encontrada = "false" ]; then
	echo "402"
  fi
else
	echo "400"
fi
}

function validarHayArchEnDir(){
	path=$1
	resultado="false"
	#me posiciono en el directorio
        cd $path
		
	#veo si hay archivos
	if [ `ls |wc -l` != 0 ]; then
		resultado="true"
	fi
	cd $BINDIR
	echo $resultado
}

######################################################


#######################################
#  confirmo si se inicio el ambiente  #
#######################################

#si el sistema no está inicializado cancelo
sist_iniciado=`seEjecutoIniciarU`
if [ $sist_iniciado -eq 1 ]; then #1

#valido que DetectarU no este en ejecucion
demonio_old=`pgrep -o DetectarU`
demonio_new=`pgrep -n DetectarU`
if [ $demonio_old = $demonio_new ]; then #2

    #######################################
    #	    Inicio loop infinito          #
    #######################################
    while [ 1 ]
      do

        #veo si hay archivos en ARRDIR
	if [ `validarHayArchEnDir $ARRIDIR` = "true" ]; then #3
	        
	  #por c/archivo veo si el nombre está bien formado
          #<región_id>-<branch_id> y sucursal vigente
	  #recorro ARRIDIR
	  arribos=$ARRIDIR/*
	  for archivo in $arribos
	  do	

	     #parseo archivo de entrada
	     #sacarle hasta las barras al path
	     arch_parseado=`echo ${archivo##*/}`
	  
	     #sacarle desde el punto
	     arch_parseado=`echo ${arch_parseado%%.*}` 
		
	     arch_valido=`validarNombreArchivo "$arch_parseado"`
	     if [ "$arch_valido" = "0" ]; then #4
		$moverU "$archivo" $GRUPO/inst_recibidas "DetectarU" 
		$loguearU -i "Se ha movido el archivo: "${arch_parseado}", al directorio de instalaciones recibidas" -c DetectarU
	     else
		
		$moverU "$archivo" $RECHDIR
		$loguearU -e $arch_valido -v "${arch_parseado}"
             fi #4
  	  done
	
  	  #veo si hay archivos en $GRUPO/inst_recibidas
          if [ `validarHayArchEnDir $GRUPO/inst_recibidas` = "true" ]; then #5
		#llamo a GrabarParqueU
                $grabarparqueU
	  fi #5

        fi #3

        #dormir
        sleep 15

    #######################################
    # 	    fin loop infinito 	          #
    #######################################
    done
fi #2
echo "Ya hay un DetectarU en ejecucion, no se puede volver a iniciar"
exit
fi #1
echo "El sistema no ha sido inicializado - DetectarU se detendra"
cd ..
